package com.atguigu.gmall.product.service.impl;

import com.atguigu.gmall.product.entity.SkuAttrValue;
import com.atguigu.gmall.product.entity.SkuImage;
import com.atguigu.gmall.product.entity.SkuInfo;

import com.atguigu.gmall.product.entity.SkuSaleAttrValue;
import com.atguigu.gmall.product.service.SkuAttrValueService;
import com.atguigu.gmall.product.service.SkuImageService;
import com.atguigu.gmall.product.service.SkuSaleAttrValueService;
import com.atguigu.gmall.product.vo.SkuInfoVo;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;

import com.atguigu.gmall.product.service.SkuInfoService;
import com.atguigu.gmall.product.mapper.SkuInfoMapper;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.ArrayList;
import java.util.List;

/**
* @author ysy
* @description 针对表【sku_info(库存单元表)】的数据库操作Service实现
* @createDate 2023-10-07 23:08:39
*/
@Service
public class SkuInfoServiceImpl extends ServiceImpl<SkuInfoMapper, SkuInfo>
    implements SkuInfoService{

    @Autowired
    SkuImageService skuImageService;
    @Autowired
    SkuAttrValueService skuAttrValueService;
    @Autowired
    SkuSaleAttrValueService skuSaleAttrValueService;

    @Transactional
    @Override
    public void saveSkuInfo(SkuInfoVo vo) {
        SkuInfo skuInfo = new SkuInfo();
        BeanUtils.copyProperties(vo,skuInfo);
        save(skuInfo);

        Long skuId = skuInfo.getId();

        //2,Sku的图片信息 保存到 sku_image
        List<SkuImage> images = new ArrayList<>();
        List<SkuInfoVo.SkuImageListDTO> skuImageList = vo.getSkuImageList();
        for (SkuInfoVo.SkuImageListDTO image : skuImageList) {
            SkuImage skuImage = new SkuImage();
            BeanUtils.copyProperties(image,skuImage);
            skuImage.setSkuId(skuId);
            images.add(skuImage);
        }
        skuImageService.saveBatch(images);

        //3,sku的平台属性名和值 保存到sku_attr_value
        List<SkuAttrValue> attrValueList = new ArrayList<>();
        List<SkuInfoVo.SkuAttrValueListDTO> skuAttrValueList = vo.getSkuAttrValueList();
        for (SkuInfoVo.SkuAttrValueListDTO attrValue : skuAttrValueList) {
            SkuAttrValue skuAttrValue = new SkuAttrValue();
            BeanUtils.copyProperties(attrValue,skuAttrValue);
            skuAttrValue.setSkuId(skuId);
            attrValueList.add(skuAttrValue);
        }
        skuAttrValueService.saveBatch(attrValueList);

        //4,sku的销售属性名和值 保存到销售属性值
        List<SkuSaleAttrValue> values = new ArrayList<>();
        List<SkuInfoVo.SkuSaleAttrValueListDTO> saleAttrValueList = vo.getSkuSaleAttrValueList();
        for (SkuInfoVo.SkuSaleAttrValueListDTO saleAttrValue : saleAttrValueList) {
            SkuSaleAttrValue skuSaleAttrValue = new SkuSaleAttrValue();
            skuSaleAttrValue.setSkuId(skuId);
            skuSaleAttrValue.setSpuId(vo.getSpuId());
            skuSaleAttrValue.setSaleAttrValueId(saleAttrValue.getSaleAttrValueId());

            values.add(skuSaleAttrValue);
        }

        skuSaleAttrValueService.saveBatch(values);
    }
}




